#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>

#define MAX_SIZE 20
#define ok 1
#define error 0

typedef struct 
{
    int *elem;
    int len;
}sqlist;
int initlist(sqlist *l)
{
    l->elem = (int*)malloc(MAX_SIZE*sizeof(int));
    if(!l->elem) return error;
    l->len = 0;
    return ok;
}
int insertlist(sqlist *l,int i,int e)
{
    if(i<1||i>l->len+1) return error;//当i不在范围内时
    if(l->len==MAX_SIZE) return error;//线性表已满
    if(i<=l->len)//若插入位置不在表尾
        for(int j=l->len-1;j>=i-1;j--)
        {
            l->elem[j+1] = l->elem[j];
        }
        l->elem[i-1] = e;
        l->len++;
        return ok;
}
int deletelist(sqlist *l,int i,int *e)
{
    if(l->len==0) return error;
    if(i<1||i>l->len) return error;
    *e = l->elem[i-1];
    if(i<l->len)
    {
        for(int j=i;j<l->len;j++)
        {
            l->elem[j-1] = l->elem[j];
        }
    }
    l->len--;
    return ok;
}
void OutPut(sqlist L){
    printf("当前顺序表的长度:%d\n", L.len);
    for(int i = 0; i < L.len; i++){
        printf("%d ",L.elem[i]);
    }
    printf("\n");
}
int main(int argc,char const *argv[])
{
    sqlist L;
    printf("------构造一个空的线性表L------\n");
    initlist(&L);
    OutPut(L);  //打印结果
    printf("------测试插入10个数------\n");
    for(int i = 1;i <= 10; i++){
        insertlist(&L,i,i);
    }
    OutPut(L);  //打印结果
    printf("------在第三位之前插入0------\n");
    insertlist(&L,3,0);
    OutPut(L);  //打印结果
    printf("------删除第6位的数据------\n");
    int e;
    deletelist(&L,6,&e);
    printf("删除的数据为：%d\n", e);
    OutPut(L);  //打印结果
}
